package com.example.automobile_positioning;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.example.automobile_positioning.activity.SmsActivity;
import com.example.automobile_positioning.util.SPUtils;


public class BaiduMapActivity extends Activity {
	MapView mBaiduMapView;
	BaiduMap mBaiduMap;
	boolean ifFrist = true;
	private TextView mLatitude, mLongitude, mTime;
	private Button mSend;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 在使用SDK各组件之前初始化context信息，传入ApplicationContext
		// 注意该方法要再setContentView方法之前实现
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题
		setContentView(R.layout.activity_baidu_map);
		// 获取baiduMap对象
		mBaiduMapView = (MapView) findViewById(R.id.bmapView);
		mLatitude = (TextView) findViewById(R.id.bLatitude);
		mLongitude = (TextView) findViewById(R.id.bLongitude);
		mSend = (Button) findViewById(R.id.btn_location_send);
		mTime = (TextView) findViewById(R.id.btime);
		// 地图初始化  
		mBaiduMap = mBaiduMapView.getMap();
		// 开启定位图层
		mBaiduMap.setMyLocationEnabled(true);
		// 定位初始化
		mLocationClient = new LocationClient(getApplicationContext());     //声明LocationClient类
	    mLocationClient.registerLocationListener(myListener);    //注册监听函数
	    initLocation(); // 设置相关参数
	    mLocationClient.start(); // 开始定位
	    
	    mSend.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				Intent send=new Intent(BaiduMapActivity.this,SmsActivity.class);
				//用Bundle携带数据
			    Bundle bundle=new Bundle();
			    //传递name参数为tinyphp
			    bundle.putString("mLongitude", "mLongitude");
			    bundle.putString("mLatitude", "mLatitude");
			    bundle.putString("mTime", "Latitude");
			    send.putExtras(bundle);
				startActivity(send);
			}
		});
		
	}



	/**
	 * 添加标注
	 */
	public void addMarker(final BDLocation location) {
		// 定义Maker坐标点
		LatLng point = new LatLng(location.getLatitude(),
				location.getLongitude());
		// 构建Marker图标
		BitmapDescriptor bitmap = BitmapDescriptorFactory
				.fromResource(R.drawable.icon_marka);
		// 构建MarkerOption，用于在地图上添加Marker
		OverlayOptions option = new MarkerOptions().position(point)
				.icon(bitmap);
		// 在地图上添加Marker，并显示
		mBaiduMap.addOverlay(option);
		mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() {

			@Override
			public boolean onMarkerClick(Marker arg0) {
				// TODO Auto-generated method stub
				// Toast.makeText(MainActivity.this, "", duration)
				return false;
			}
		});
	}
	
	public LocationClient mLocationClient = null;
	public BDLocationListener myListener = new MyLocationListener();
	private void initLocation() {
		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationMode.Hight_Accuracy);// 可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
		option.setCoorType("gcj02");// 可选，默认gcj02，设置返回的定位结果坐标系
		int span = 0;
		option.setScanSpan(span);// 可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
		option.setIsNeedAddress(true);// 可选，设置是否需要地址信息，默认不需要
		option.setOpenGps(false);// 可选，默认false,设置是否使用gps
		option.setLocationNotify(true);// 可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
		option.setIsNeedLocationDescribe(true);// 可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
		option.setIsNeedLocationPoiList(true);// 可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
		option.setIgnoreKillProcess(false);// 可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
		option.SetIgnoreCacheException(false);// 可选，默认false，设置是否收集CRASH信息，默认收集
		option.setEnableSimulateGps(false);// 可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
		mLocationClient.setLocOption(option);
	}
	
	private boolean isFirstLoc = true;
	public class MyLocationListener implements BDLocationListener {
		 
        @Override
        public void onReceiveLocation(BDLocation location) {
        	// map view 销毁后不在处理新接收的位置  
            if (location == null || mBaiduMapView == null)  
                return;  
            if (isFirstLoc) {  
                isFirstLoc = false;
             
                // 添加标注
                addMarker(location);
                // 定位到当前位置
                LatLng ll = new LatLng(location.getLatitude(),  
                        location.getLongitude());  
                MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);  
                mBaiduMap.animateMapStatus(u);
                //********************** 标注相关  **********************//
                // 创建InfoWindow展示的view
                TextView textView = new TextView(getApplicationContext());
                // 地址
				String address = location.getAddrStr();
				// 设置文字
				textView.setText("地址:" + address+"/n");
                SPUtils.put(BaiduMapActivity.this, "latitude", location.getLatitude());
				SPUtils.put(BaiduMapActivity.this, "longitude", location.getLongitude());
				String str=new SimpleDateFormat("yyyy年M月dd日 HH时mm分ss秒").format(new Date());
				SPUtils.put(BaiduMapActivity.this, "time",str);
				mLatitude.setText(String.valueOf(location.getLatitude()));
				mLongitude.setText(String.valueOf(location.getLongitude()));
				mTime.setText(String.valueOf(str));
				textView.setTextSize(16);
				textView.setTextColor(Color.RED);
				// 定义用于显示该InfoWindow的坐标点
				LatLng pt = new LatLng(location.getLatitude(), location
						.getLongitude());
				// 创建InfoWindow , 传入 view， 地理坐标， y 轴偏移量
				InfoWindow mInfoWindow = new InfoWindow(textView, pt, -70);
				// 显示InfoWindow
				mBaiduMap.showInfoWindow(mInfoWindow);
				inits(location);//调用保存在sd卡的方法
            }  
        }
        public void onReceivePoi(BDLocation poiLocation) {  
        }  
	}
	
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity执行onResume时执行mBaiduMapView. onResume ()，实现地图生命周期管理  
        mBaiduMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity执行onPause时执行mBaiduMapView. onPause ()，实现地图生命周期管理  
        mBaiduMapView.onPause();  
        }
    
	@Override
	protected void onDestroy() {
		// 释放资源
		super.onDestroy();
		mBaiduMapView.onDestroy();
		mBaiduMap.setMyLocationEnabled(false);
	}
	
	//保存在SD卡
	   public void inits(BDLocation location){		
		try {
	        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){  
	         File sdCardDir = Environment.getExternalStorageDirectory();//获取SDCard目录,2.2的时候为:/mnt/sdcart  2.1的时候为：/sdcard，所以使用静态方法得到路径会好一点。  
	         File saveFile = new File(sdCardDir, "/location_"+System.currentTimeMillis()+ ".txt");  
	          //创建一个文件夹
			  //判断内存卡里是否有这个文件夹 没有则创建
			   if(!saveFile.exists()){
				  saveFile.createNewFile();
			  }
	         FileWriter fileWriter=new FileWriter(saveFile, true);  // 追加
	         fileWriter.write("Latitude:"+location.getLatitude()+",Longitude:"+location.getLongitude()+",date:"+new SimpleDateFormat("yyyy年M月dd日 HH时mm分ss秒").format(new Date())+"\n");
	       
	         fileWriter.flush();
	         fileWriter.close();
	         }  
	    } catch (IOException e) {
	       e.printStackTrace();
	    }
	  }
	
	
}
